//给定一个非负整数 num，反复将各个位上的数字相加，直到结果为一位数。返回这个结果。 
//
// 
//
// 示例 1: 
//
// 
//输入: num = 38
//输出: 2 
//解释: 各位相加的过程为：
//38 --> 3 + 8 --> 11
//11 --> 1 + 1 --> 2
//由于 2 是一位数，所以返回 2。
// 
//
// 示例 2: 
//
// 
//输入: num = 0
//输出: 0 
//
// 
//
// 提示： 
//
// 
// 0 <= num <= 2³¹ - 1 
// 
//
// 
//
// 进阶：你可以不使用循环或者递归，在 O(1) 时间复杂度内解决这个问题吗？ 
//
// Related Topics 数学 数论 模拟 👍 741 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int addDigits(int num) {
        while(num/10 != 0){
            num = num/10 + num%10;//3899 389 + 9
        }
        return num;
//        //对比了下，还是我瞎写的代码效率高！
////        > 2025/08/22 23:15:00
////        解答成功:
////        执行耗时:0 ms,击败了100.00% 的Java用户
////        内存消耗:40 MB,击败了86.03% 的Java用户

        // 循环计算各位和，直到结果为一位数
//        while (num >= 10) {
//            int sum = 0;
//            // 计算当前num的各位数字之和
//            while (num > 0) {
//                sum += num % 10; // 取最后一位并累加
//                num = num / 10;  // 移除最后一位
//            }
//            num = sum; // 更新num为各位和
//        }
//        return num;
//        > 2025/08/22 23:28:21
//        解答成功:
//        执行耗时:0 ms,击败了100.00% 的Java用户
//        内存消耗:40.2 MB,击败了37.45% 的Java用户
//        if (num == 0) {
//            return 0;
//        }
//        // 非0数字的数字根：9的倍数返回9，否则返回对9的余数
//        return num % 9 == 0 ? 9 : num % 9;
//        > 2025/08/22 23:28:59
//        解答成功:
//        执行耗时:0 ms,击败了100.00% 的Java用户
//        内存消耗:40.3 MB,击败了8.23% 的Java用户
    }
}
//leetcode submit region end(Prohibit modification and deletion)
